// ------------------------------------------ ant design 5.x component types ------------------------------------------

declare type GeneralType = // 通用
  | 'button' // 按钮
  | 'float-button' // 悬浮按钮
  | 'icon' // 图标
  | 'typography'; // 排版

declare type LayoutType = // 布局
  | 'divider' // 分割线
  | 'flex' // 弹性布局
  | 'grid' // 栅格
  | 'layout' // 布局
  | 'space'; // 间距

declare type NavigationType = // 导航
  | 'anchor' // 锚点
  | 'breadcrumb' // 面包屑
  | 'dropdown' // 下拉菜单
  | 'menu' // 导航菜单
  | 'pagination' // 分页
  | 'steps'; // 步骤条

declare type DataEntryType = //数据录入
  | 'auto-complete' // 自动完成
  | 'cascader' // 级联选择
  | 'checkbox' // 多选框
  | 'color-picker' // 颜色选择器
  | 'date-picker' // 日期选择器
  | 'date-range-picker'
  | 'form' // 表单
  | 'input' // 输入框
  | 'password'
  | 'email'
  | 'textarea'
  | 'input-number' // 数字输入框
  | 'mentions' // 提及
  | 'radio' // 单选框
  | 'rate' // 评分
  | 'select' // 选择器
  | 'slider' // 滑动输入条
  | 'switch' // 开关
  | 'time-picker' // 时间选择器
  | 'time-range-picker'
  | 'transfer' // 穿梭框
  | 'tree-select' // 树选择
  | 'upload'; // 上传

declare type DataDisplayType = // 数据展示
  | 'avatar' // 头像
  | 'badge' // 徽标数
  | 'calendar' // 日历
  | 'card' // 卡片
  | 'carousel' // 走马灯
  | 'collapse' // 折叠面板
  | 'descriptions' // 描述列表
  | 'empty' // 空状态
  | 'image' // 图片
  | 'list' // 列表
  | 'popover' // 气泡卡片
  | 'qr-code' // 二维码
  | 'segmented' // 分段控制器
  | 'statistic' // 统计数值
  | 'table' // 表格
  | 'tabs' // 标签页
  | 'tag' // 标签
  | 'timeline' // 时间轴
  | 'tooltip' // 文字提示
  | 'tour' // 漫游式引导
  | 'tree'; // 树形控件

declare type FeedbackType = // 反馈
  | 'alert' // 警告提示
  | 'drawer' // 抽屉
  | 'message' // 全局提示
  | 'modal' // 对话框
  | 'notification' // 通知提醒框
  | 'pop-confirm' // 气泡确认框
  | 'progress' // 进度条
  | 'result' // 结果
  | 'skeleton' // 骨架屏
  | 'spin' // 加载中
  | 'watermark'; // 水印

declare type OtherType = // 其他
  | 'affix' // 固钉
  | 'app' // 包裹组件
  | 'config-provider'; // 全局化配置

// ------------------------------------------ ant design 5.x component types ------------------------------------------

declare type CustomerType = 'icon-font' // 图标
  | 'icon-font-select' // 图标选择
  | 'draggable-modal'; // 拖拽Modal

/**
 * 表单组件类型
 */
interface FormComponentType<T = any> {
  value?: T;
  onChange?: (value: T) => void;
}

declare type ComponentType = GeneralType
  | LayoutType
  | NavigationType
  | DataEntryType
  | DataDisplayType
  | FeedbackType
  | OtherType
  | CustomerType;

export {
  // Ant Design Components
  GeneralType,
  LayoutType,
  NavigationType,
  DataEntryType,
  DataDisplayType,
  FeedbackType,
  OtherType,
  // 自定义组件类型
  CustomerType,
  ComponentType,
  // 表单组件类型
  FormComponentType,
}